package com.atde._05_behavioral_design_patterns.iterator;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @BelongsProject: hsp_java_design_mode
 * @BelongsPackage: com.atde._05_behavioral_design_patterns.iterator
 * @Author: Del
 * @CreateTime: 2025-06-27  15:09
 * @Description: 迭代器模式中的具体聚合类，表示一个学院（信息工程学院）
 * 管理其下属 Department 列表，并提供统一的迭代器接口供外部遍历访问
 * @Version: 1.0
 */
public class InfoCollege implements Colleage{

    /**
     * 部门列表
     *
     * 用于存储和管理所有部门对象该列表初始化为空，随着部门数据的加载或添加，将填充此列表
     * 为什么使用ArrayList
     * - ArrayList基于动态数据实现，随机访问元素性能高
     * - 在部门管理中，通常需要频繁地访问特定部门进行查看或修改操作，因此选择ArrayList
     *
     * 注意：此处未直接提供部门数据的加载或更新方法，因为迭代器模式主要关注集合的遍历，而集合的数据加载或更新通常由外部程序完成
     *
     */
    private List<Department> departmentsList = new ArrayList<>();

    /**
     * 初始化信息工程学院对象，并默认添加若干个测试用的专业数据
     * 用于演示迭代器下的集合遍历功能
     */
    public InfoCollege() {
        addDepartment("信息安全专业", "信息安全专业");
        addDepartment("网络安全专业", "网络安全专业");
        addDepartment("服务器安全专业", "服务器安全专业");
    }

    /**
     * 获取该学院的名称。
     *
     * @return 学院名称，固定返回 "信息工程学院"
     */
    @Override
    public String getName() {
        return "信息工程学院";
    }

    /**
     * 添加一个新的部门到学院中。
     *
     * @param name 部门名称
     * @param desc 部门描述
     */
    @Override
    public void addDepartment(String name, String desc) {
        Department department = new Department(name, desc);
        departmentsList.add(department);
    }

    /**
     * 创建并返回一个迭代器实例，用于遍历当前学院的所有部门。
     *
     * @return 返回一个 [Iterator](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html) 类型的迭代器对象
     */
    @Override
    public Iterator createIterator() {
        return new InfoColleageIterator(departmentsList);
    }
}
